home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 071-080 / amok71 / openclose / openclose.def next >
Text File  |  1993-11-04  |  10KB  |  267 lines

  1. (**************************************************************************
  2.  
  3.  
  4. :Program.       DEFINITION MODULE OpenClose
  5.  
  6. :Contents.      intelligente Open-Funktionen und Close-Prozeduren
  7.  
  8. :Usage.         einfach importieren und benutzen...
  9.  
  10.  
  11. :Copyright.     Public Domain.
  12.  
  13. :Author.        Thomas Ansorge
  14.  
  15. :Address.       Dinkelackerring 55, W-6730 Neustadt, Deutschland
  16.  
  17.  
  18. :Language.      Modula-2
  19.  
  20. :Translator.    M2Amiga V4.0 (deutsch)
  21.  
  22.  
  23. :Version.       1.4 vom 17.05.1992
  24.  
  25. :History.       0.9 vom 06.12.1991: erste Tipparbeiten...
  26.  
  27. :History.       1.0 vom 08.12.1991: Es läuft.
  28.  
  29. :History.       1.1 vom 21.12.1991:
  30. :History.          - verbesserte Fehlerbehandlung
  31. :History.          - OpenWindow prüft die Existenz eines Screens bei
  32. :History.            customScreen nach.
  33.  
  34. :History.       1.2 vom 01.01.1992:
  35. :History.          - Verbesserung in CreatePort
  36. :History.          - Verbesserung in CloseWindow
  37.  
  38. :History.       1.3 vom 07.04.1992:
  39. :History.          - neue Variablen: AFPuffer, DebugMode
  40.  
  41. :History.       1.4 vom 17.05.1992:
  42. :History.          - neue Funktion OpenScreenTagList
  43. :History.          - neue Variable kick20
  44.  
  45.  
  46. **************************************************************************)
  47.  
  48.  
  49. DEFINITION MODULE OpenClose;
  50.  
  51. (*$ NameChk := FALSE   LargeVars := FALSE   LongAlign := FALSE *)
  52.  
  53. IMPORT DD: DosD;
  54.  
  55. IMPORT ED: ExecD;
  56.  
  57. IMPORT GD: GraphicsD;
  58.  
  59. IMPORT ID: IntuitionD;
  60.  
  61. FROM SYSTEM IMPORT ADDRESS;
  62.  
  63. IMPORT UD: UtilityD;
  64.  
  65. (* --------------------------------------------------------------------- *)
  66.  
  67. (*                           V A R I A B L E N                           *)
  68. (*                           ~~~~~~~~~~~~~~~~~                           *)
  69.  
  70. (* ErrorHandling bestimmt, was im Fehlerfall (Öffnen) passieren soll:    *)
  71. (* ErrorAssert (default) bricht mit einem Assert ab, ErrorBreakPoint     *)
  72. (* setzt einen BreakPoint und ErrorNothing läßt OpenClose nichts tun.    *)
  73.  
  74. TYPE ErrorHandlingType = (ErrorAssert, ErrorBreakPoint, ErrorNothing);
  75.  
  76. VAR ErrorHandling: ErrorHandlingType;
  77.  
  78. (* OpenFont benutzt grundsätzlich die AvailFonts-Funktion aus der        *)
  79. (* DiskFonts-Library. Hier können Sie die Puffergröße festlegen. War     *)
  80. (* AFPuffer zu wenig, so enthält AFPuffer nach dem ersten Aufruf von     *)
  81. (* OpenFont die tatsächlich benötigte Größe -- Sie sollten es also dann  *)
  82. (* nicht mehr ändern!                                                    *)
  83.  
  84. CONST DefAFPuffer = 1024; (* Bytes *)
  85.  
  86. VAR AFPuffer: LONGINT;
  87.  
  88. (* RememberAFPuffer = TRUE veranlaßt OpenFont, sich die beiden Puffer    *)
  89. (* von AvailFonts (RAM und DISK) zu merken. Dies ist besonders bei       *)
  90. (* großen FONTS:-Directories nützlich, wenn mehrere Fonts zu öffnen      *)
  91. (* sind.                                                                 *)
  92.  
  93. CONST DefRememberAFPuffer = FALSE;
  94.  
  95. VAR RememberAFPuffer: BOOLEAN;
  96.  
  97. (* DebugMode ist dazu da, Sie im Falle eines Patzers Ihres Programms per *)
  98. (* Requester darüber zu informieren.                                     *)
  99.  
  100. CONST DefDebugMode = FALSE;
  101.  
  102. VAR DebugMode: BOOLEAN;
  103.  
  104. (* mit Kick20 können Sie auf Kickstart 2.0 prüfen                        *)
  105.  
  106. VAR Kick20: BOOLEAN;
  107.  
  108. (* --------------------------------------------------------------------- *)
  109.  
  110. (*             P R O Z E D U R E N  U N D  F U N K T I O N E N           *)
  111. (*             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           *)
  112.  
  113. (* grundsätzlich gilt:                                                   *)
  114.  
  115. (* Mit "Liste" oder "Listeneintrag" ist im Folgenden die private Liste   *)
  116. (* des Moduls OpenClose gemeint und nicht etwa eine Systemliste.         *)
  117.  
  118. (* Alle Close-Prozeduren schließen nur diejenigen Resourcen, die durch   *)
  119. (* Funktionen aus diesem Modul geöffnet wurden.                          *)
  120.  
  121. (* Auch bei mehrmaligem Aufruf einer Close-Prozedur wird dieselbe        *)
  122. (* Resource nur einmal geschlossen, da alle Close-Prozeduren die         *)
  123. (* Existenz der Resource anhand der Liste nachprüfen. Einige der         *)
  124. (* Prozeduren prüfen zusätzlich die Existenz anhand von Systemlisten     *)
  125. (* nach und löschen ggf. nur den Listeneintrag.                          *)
  126.  
  127. (* Alle während eines Programmlaufes geöffneten und nicht geschlossenen  *)
  128. (* Resourcen werden am Programmende automatisch freigegeben. Das Frei-   *)
  129. (* geben geschieht dann in umgekehrter Reihenfolge wie das Öffnen.       *)
  130.  
  131. (* Ich habe die Erfahrung gemacht, daß der AMIGA (Kickstart 1.3)         *)
  132. (* abstürzen kann, wenn gleichzeitig mehrere Fenster oder Screens        *)
  133. (* geöffnet oder geschlossen werden sollen. Dies passiert hier nicht, da *)
  134. (* die entsprechenden Aufrufe in den Libraries in Forbid und Permit ein- *)
  135. (* geschlosen sind.                                                      *)
  136.  
  137. (* --------------------------------------------------------------------- *)
  138.  
  139. (* für DosL.Close: *)
  140.  
  141. PROCEDURE Close (VAR File: DD.FileHandlePtr);
  142.  
  143. (* schließt die Datei und setzt File auf NIL.                            *)
  144.  
  145. (* --------------------------------------------------------------------- *)
  146.  
  147. (* für GraphicsL.CloseFont: *)
  148.  
  149. PROCEDURE CloseFont (VAR Font: GD.TextFontPtr);
  150.  
  151. (* Schließt den Font und setzt Font auf NIL.                             *)
  152.  
  153. (* --------------------------------------------------------------------- *)
  154.  
  155. (* für IntuitionL.CloseScreen: *)
  156.  
  157. PROCEDURE CloseScreen (VAR Screen: ID.ScreenPtr);
  158.  
  159. (* schließt einen mit OpenScreen geöffneten Screen dann und nur dann,    *)
  160. (* wenn kein Fenster mehr darauf geöffnet ist. Mitten im Programm wird   *)
  161. (* die Ausführung des Befehls ggf. verweigert; am Programmende werden    *)
  162. (* alle Fenster des selben Programms automatisch geschlossen, sind dann  *)
  163. (* noch Fenster übrig, wird der Benutzer per Requester so lange zum      *)
  164. (* Schließen derselben aufgefordert, bis der Screen geschlossen werden   *)
  165. (* kann.                                                                 *)
  166. (* Screen wird beim Schließen auf NIL gesetzt.                           *)
  167.  
  168. (* --------------------------------------------------------------------- *)
  169.  
  170. (* für IntuitionL.CloseWindow: *)
  171.  
  172. PROCEDURE CloseWindow (VAR Window: ID.WindowPtr);
  173.  
  174. (* Schließt ein mit OpenWindow geöffnetes Fenster, setzt Window auf NIL. *)
  175.  
  176. (* --------------------------------------------------------------------- *)
  177.  
  178. (* für ExecSupport.CreatePort: *)
  179.  
  180. PROCEDURE CreatePort (portName: ADDRESS;
  181.                       priority: SHORTINT): ED.MsgPortPtr;
  182.  
  183. (* CreatePort prüft nach, ob ein Port dieses Namens schon existiert und  *)
  184. (* öffnet den 2. Port ggf. nicht!                                        *)
  185.  
  186. (* --------------------------------------------------------------------- *)
  187.  
  188. PROCEDURE DeallocateAFDiskPuffer;
  189.  
  190. (* OpenFont kann die beiden Puffer von AvailFonts behalten und muß sie   *)
  191. (* dann nicht jedesmal neu erzeugen und füllen. Mit dieser Prozedur      *)
  192. (* können Sie den Puffer für die Diskfonts löschen und OpenFont zwingen, *)
  193. (* das FONTS:-Directory beim nächsten Mal neu zu laden.                  *)
  194.  
  195. (* Wenn RemenberAFPuffer = FALSE ist, brauchen Sie diese Prozedur nicht. *)
  196.  
  197. (* --------------------------------------------------------------------- *)
  198.  
  199. PROCEDURE DeallocateAFMemPuffer;
  200.  
  201. (* dto. für die Fonts, die sich schon im RAM oder ROM befinden.          *)
  202.  
  203. (* Diese Prozedur wird automatisch aufgerufen, wenn Sie einen Font von   *)
  204. (* Disk laden, da dann ein Font mehr im RAM ist!                         *)
  205.  
  206. (* --------------------------------------------------------------------- *)
  207.  
  208. (* für ExecSupport.DeletePort: *)
  209.  
  210. PROCEDURE DeletePort (VAR Port: ED.MsgPortPtr);
  211.  
  212. (* löscht den Port und setzt Port auf NIL *)
  213.  
  214. (* --------------------------------------------------------------------- *)
  215.  
  216. PROCEDURE LoescheListenEintrag (Eintrag: ADDRESS);
  217.  
  218. (* OpenClose merkt sich die geöffneten und nicht geschlossenen Resourcen *)
  219. (* intern in einer Liste. Sollte es vorkommen, daß ein Listeneintrag     *)
  220. (* gelöscht werden MUSS, ohne daß gleichzeitig die Resource geschlossen  *)
  221. (* werden darf, DANN UND NUR DANN verwenden Sie bitte diese Prozedur.    *)
  222. (* Eintrag ist der Pointer, den die zum Listeneintrag gehörende Open-    *)
  223. (* Funktion geliefert hat, z. Bsp. ein ScreenPtr.                        *)
  224.  
  225. (* --------------------------------------------------------------------- *)
  226.  
  227. (* für DosL.Open: *)
  228.  
  229. PROCEDURE Open (name      : ADDRESS;
  230.                 accessMode: LONGINT): DD.FileHandlePtr;
  231.  
  232. (* --------------------------------------------------------------------- *)
  233.  
  234. (* für OFont.OpenFont: *)
  235.  
  236. PROCEDURE OpenFont (textAttr: GD.TextAttrPtr): GD.TextFontPtr;
  237.  
  238. (* --------------------------------------------------------------------- *)
  239.  
  240. (* für IntuitionL.OpenScreen: *)
  241.  
  242. PROCEDURE OpenScreen (VAR newScreen: ID.NewScreen): ID.ScreenPtr;
  243.  
  244. (* --------------------------------------------------------------------- *)
  245.  
  246. (* für IntuitionL.OpenScreenTagList: *)
  247.  
  248. PROCEDURE OpenScreenTagList (newScreen: ID.NewScreenPtr;
  249.                              tagList  : UD.TagItemPtr
  250.                             ): ID.ScreenPtr;
  251.                             
  252. (* versucht das Öffnen nur, wenn Kick20 = TRUE ist!                      *)
  253.  
  254. (* --------------------------------------------------------------------- *)
  255.  
  256. (* für IntuitionL.OpenWindow: *)
  257.  
  258. PROCEDURE OpenWindow (VAR newWindow: ID.NewWindow): ID.WindowPtr;
  259.  
  260. (* Soll das Fenster auf einem Customscreen geöffnet werden, so prüft     *)
  261. (* OpenWindow zuerst nach, ob dieser überhaupt existiert; ggf. wird das  *)
  262. (* Fenster nicht geöffnet.                                               *)
  263.  
  264. (* --------------------------------------------------------------------- *)
  265.  
  266. END OpenClose (* DEFINITION MODULE *).
  267.